import getRequestConfigDescrible from '../../utils/request-config-desc';
import getDropdownOptionPropsDescrible from '../../utils/dropdown-option-props-desc';
import fieldTypes from '../../utils/field-types-desc';

const fieldType = fieldTypes.find(({ code }) => code === 'select') || {};

export default {
    attributes: [
        {
            params: 'v-model',
            des: '绑定值',
            type: fieldType.valueType,
            values: '-',
            defaultVal: '-',
        },
        {
            params: 'props',
            des: '表单元素配置; 详细配置请查看下方【props 配置项】',
            type: 'Object',
            values: '-',
            defaultVal: '-',
            details: [
                {
                    title: '配置项【props】',
                    configList: [
                        {
                            params: 'type',
                            des: `表单项控件的类型(此控件的 type 固定为 "${fieldType.code}")`,
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'value',
                            des: '表单项控件的默认值，若绑定值为空，将获取该值作为初始值',
                            type: fieldType.valueType,
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'size',
                            des: '尺寸大小',
                            type: 'String',
                            values: '"large" | "default" | "small"',
                            defaultVal: '"default"',
                        },
                        {
                            params: 'disabled',
                            des: '是否禁用',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'readonly',
                            des: '是否只读',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'placeholder',
                            des: '输入框占位提示',
                            type: 'String',
                            values: '-',
                            defaultVal: '"请选择"',
                        },
                        {
                            params: 'options',
                            des: '控件选项的配置数据；选项选中时，组件内默认从选项数据内取 "value" 字段对应的值作为绑定值，取 "label" 字段对应的值作为展示；如果数据内不存在这两个字段名，则需要使用 optionProps 属性来指定',
                            type: 'Array',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'optionProps',
                            des: '指定控件选项配置的键/值所对应的字段编码',
                            type: 'Object',
                            values: '-',
                            defaultVal: '请查阅下方 optionProps 配置项说明',
                            details: [
                                {
                                    title: '配置项【optionProps】',
                                    configList: getDropdownOptionPropsDescrible('select'),
                                },
                            ],
                        },
                        {
                            params: 'requestConfig',
                            des: '通过接口请求选项数据的配置；详情请查阅下方说明',
                            type: 'Object',
                            values: '-',
                            defaultVal: '-',
                            details: [
                                {
                                    title: '配置项【requestConfig】',
                                    describes: [
                                        '除以下字段外，requestConfig 还支持传入axios的所有可配置参数，详细配置说明请查阅 https://github.com/axios/axios#request-config',
                                    ],
                                    configList: getRequestConfigDescrible('item'),
                                },
                            ],
                        },
                        {
                            params: 'multiple',
                            des: '是否支持多选',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'multipleLimit',
                            des: 'multiple 为 true 时最多可以选择的项目数，为 0 则不限制',
                            type: 'Number',
                            values: '-',
                            defaultVal: '0',
                        },
                        {
                            params: 'collapseTags',
                            des: '多选时是否将选中值按文字的形式展示',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'maxCollapseTags',
                            des: '需要显示的 Tag 的最大数量 只有当 collapse-tags 设置为 true 时才会生效。',
                            type: 'Number',
                            values: '-',
                            defaultVal: '1',
                        },
                        {
                            params: 'collapseTagsTooltip',
                            des: '当鼠标悬停于折叠标签的文本时，是否显示所有选中的标签。要使用此属性，collapse-tags属性必须设定为 true',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'effect',
                            des: 'Tooltip 主题',
                            type: 'String',
                            values: '"dark" | "light"',
                            defaultVal: '"light"',
                        },
                        {
                            params: 'filterable',
                            des: '是否支持筛选',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'filterMethod',
                            des: '自定义筛选方法',
                            type: 'Function(val)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'remote',
                            des: '是否为远程搜索',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'remoteMethod',
                            des: '远程搜索方法',
                            type: 'Function(val)',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'remoteShowSuffix',
                            des: '使用远程搜索方法时是否显示后缀图标',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'loading',
                            des: '是否正在从远程获取数据',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'loadingText',
                            des: '从服务器加载内容时显示的加载中的文本',
                            type: 'String',
                            values: '-',
                            defaultVal: '"Loading"',
                        },
                        {
                            params: 'noMatchText',
                            des: '搜索条件无匹配时显示的文字',
                            type: 'String',
                            values: '-',
                            defaultVal: '"No matching data"',
                        },
                        {
                            params: 'noDataText',
                            des: '无选项时显示的文字',
                            type: 'String',
                            values: '-',
                            defaultVal: '"No data"',
                        },
                        {
                            params: 'allowCreate',
                            des: '是否允许用户创建新条目， 只有当 filterable 设置为 true 时才会生效',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'reserveKeyword',
                            des: '当 multiple 和 filter被设置为 true 时，是否在选中一个选项后保留当前的搜索关键词',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'clearable',
                            des: '是否展示清空图标',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'defaultFirstOption',
                            des: '是否在输入框按下回车时，选择第一个匹配项。 需配合 filterable 或 remote 使用',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'popperClass',
                            des: '选择器下拉菜单的自定义类名',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'teleported',
                            des: '该下拉菜单是否使用teleport插入body元素',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'persistent',
                            des: '当下拉选择器未被激活并且persistent设置为false，选择器会被删除',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                        {
                            params: 'automaticDropdown',
                            des: '对于 filterable 为 false 的控件，此属性决定是否在输入框获得焦点后自动弹出选项菜单',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'fitInputWidth',
                            des: '下拉框的宽度是否与输入框相同',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'false',
                        },
                        {
                            params: 'suffixIcon',
                            des: '自定义后缀图标组件',
                            type: 'String | Component',
                            values: '-',
                            defaultVal: '"ArrowDown"',
                        },
                        {
                            params: 'tagType',
                            des: '标签类型',
                            type: 'String',
                            values: '"success" | "info" | "warning" | "danger"',
                            defaultVal: '"info"',
                        },
                        {
                            params: 'placement',
                            des: '下拉框出现的位置',
                            type: 'String',
                            values: '\'top\' | \'top-start\' | \'top-end\' | \'bottom\' | \'bottom-start\' | \'bottom-end\'',
                            defaultVal: '"bottom-start"',
                        },
                        {
                            params: 'unit',
                            des: '控件尾部的单位文案配置',
                            type: 'String',
                            values: '-',
                            defaultVal: '-',
                        },
                        {
                            params: 'validateEvent',
                            des: '输入时是否触发表单的校验',
                            type: 'Boolean',
                            values: 'true | false',
                            defaultVal: 'true',
                        },
                    ],
                },
            ],
        },
    ],
    events: [
        {
            name: 'change',
            des: '输入框失焦后值内容修改触发的事件',
            params: '({ value, label, data }, props)',
        },
        {
            name: 'focus',
            des: '输入框聚焦事件',
            params: '(value, props, event)',
        },
        {
            name: 'blur',
            des: '输入框失焦事件',
            params: '(value, props, event)',
        },
        {
            name: 'visible-change',
            des: '下拉框出现/隐藏时触发',
            params: '(value, props, isShow)',
        },
        {
            name: 'remove-tag',
            des: '多选模式下移除tag时触发，tag 表示移除的tag值',
            params: '(value, props, tag)',
        },
        {
            name: 'clear',
            des: '点击清空图标，清空输入框的值后抛出的事件',
            params: '(value, props)',
        },
    ],
    slots: [
        {
            name: 'option',
            des: '控件选项的内容插槽',
            params: '{ option, options }',
        },
    ],
    refs: [],
};
